<?php
/**
 * @package   auto_occasion
 * @subpackage 
 * @author    CMS
 * @copyright 2011
 * @license    All rights reserved
 */

require_once(LIB_PATH.'phpMailer/class.phpmailer.php');

class bouclageSrv {

    /**
     * Il s’agit d’envoyer des mails de relance aux clients ayant souscrit un 
     * formule sans parution dans le journal (Option de parution [durée] = 0) 
     * afin qu’il change de formule.
     */

     /**
     * Il s’agit d’envoyer des mails de relance aux clients ayant
     * souscrit un formule avec qu’une seule parution 
     * dans le journal (Option de parution [durée] = 1) afin qu’il change de formule (illimité)
     */
    public function checkParutionJournal ($parution, $check = false) {
        $sql  = " SELECT Vendeur_Nom, Vendeur_Prenom, Vendeur_Email , IdVendeur";
        $sql .= " FROM ao_vendeur V";
        $sql .= " INNER JOIN ao_voiture_occasion O ON V. IdVendeur = O.Occas_Vendeur";

        $sql .= " WHERE O.annonce_parution_id = " . $parution; // Sur le web ou un seul passage
        $sql .= " AND V.bouclage <> 1";
        if ($check) $sql .= " LIMIT 1"; 
        $jdb     = jDb::getDbWidget();
        $tResult =  $jdb->fetchAll($sql);

        return $tResult;
    }

    /**
     * Check for date de parution pour bouclae et pré bouclage
     *
     */
    public function checkAlerteBouclage () {
        $Query = "SELECT IF(parution_suppr=CURDATE(),1,0) AS Bouclage, IF(parution_relance=CURDATE(),1,0) AS PreBouclage
					FROM ao_parution
					WHERE parution_date > CURDATE()
					ORDER BY parution_date
					LIMIT 1";
        $jdb     = jDb::getConnection();
        $tResult =  $jdb->query($Query)->fetch();

        return $tResult;
    }

    /**
     * Next parution 
     *
     */
    public function prochaineParution () {
        $Query = "SELECT parution_num, DATE_FORMAT(parution_date,'%d/%m') AS Parution, DATE_FORMAT(parution_limite,'%d/%m') AS Limite, DATE_FORMAT(parution_bouclage,'%d/%m') AS Prepublication
					FROM ao_parution
					WHERE parution_date > '".date("Y-m-d")."'
					ORDER BY parution_date
					LIMIT 1";
        $jdb     = jDb::getConnection();
        $tResult =  $jdb->query($Query)->fetch();

        return $tResult;
    }

    /**
     * Date de bouclage
     *
     */
    public function findDateBouclage ($num) {
        // Recherche des dates de bouclage
		$Query = "SELECT  DATE_FORMAT(parution_date,'%d/%m') AS Parution, DATE_FORMAT(parution_limite,'%d/%m') AS Limite, DATE_FORMAT(parution_bouclage,'%d/%m') AS Prepublication
					FROM ao_parution
					WHERE parution_num = '".($num->parution_num-1)."'
						OR parution_num = '".($num->parution_num-6)."'
					ORDER BY parution_limite";
        $jdb     = jDb::getDbWidget();
        $tResult =  $jdb->fetchAll($Query);

        return $tResult;
    }

    /**
     * Récupération des données à ajouter dans le mail de relance
     *
     */
    public function getDatasForRelance () {
		$Query = "SELECT marque_libelle, modele_libelle, Occas_Version, Occas_NumImmatricul, Occas_Fimage, Occas_MontantPaye, Occas_TypePaiement, Occas_Opt_Parution,
						Civ_Nom, Vendeur_Prenom, Vendeur_Nom, Vendeur_Email, Vendeur_Naissance, Occas_Reference, Occas_Valide
					FROM ao_voiture_occasion LEFT JOIN ao_vendeur ON Occas_Vendeur = IdVendeur
						LEFT JOIN ao_civilite ON Vendeur_Civilite = IdCivilite
						LEFT JOIN ao_marque ON Occas_Marque = marque_id
						LEFT JOIN ao_modele ON Occas_Modele = modele_id
					WHERE Vendeur_Email <> ''
						AND Occas_Partenaire = ''
						AND Occas_Valide = '1'
						AND ( Occas_TypePaiement = 'g' OR ( Occas_Estpaye <> '0' AND Occas_TypePaiement <> 'g' ) )
						AND Occas_Estsaisie = '1'";
        $jdb     = jDb::getDbWidget();
        $tResult =  $jdb->fetchAll($Query);

        return $tResult;
    }

    /**
     * Récupération des tarifs
     *
     */
    public function getTarif () {
		$Query = "SELECT * 
							FROM ao_tarif
							WHERE ( (Tarif_Parution = 'X' AND Tarif_Photo = 'S'  AND IDTarif='3')
									OR (Tarif_Parution = 'X' AND Tarif_Photo = 'C'  AND IDTarif='35'))
								AND Tarif_Renouvellement = '0'
								AND Tarif_Enrichissement = 'S'
							ORDER BY Tarif_Parution, Tarif_Photo";
        $jdb     = jDb::getDbWidget();
        $tResult =  $jdb->fetchAll($Query);

        return $tResult;
    }
    /**
     * Récupération des tarifs
     *
     */
    public function getTarif2 () {
		$Query = "SELECT * 
							FROM ao_tarif
							WHERE ((Tarif_Parution = '0' AND Tarif_Photo = 'S')
									OR (Tarif_Parution = 'X' AND Tarif_Photo = 'S' AND IDTarif='3')
									OR (Tarif_Parution = 'X' AND Tarif_Photo = 'C'  AND IDTarif='35'))
								AND Tarif_Renouvellement = '0'
								AND Tarif_Enrichissement = 'S'
							ORDER BY Tarif_Parution, Tarif_Photo";
        $jdb     = jDb::getDbWidget();
        $tResult =  $jdb->fetchAll($Query);

        return $tResult;
    }

    

    /**
     * Il s’agit d’envoyer un mail d’information sur la prochaine parution de
     * l’annonce du vendeur dans le journal
     */
    public function checkNextParutionJournal ($check=false) {
        jClasses::inc('parution~parutionSrv') ;
        $prev = parutionSrv::getLastParutionDate();
        $next = parutionSrv::getNextParutionDate();
        
        if (!$next || !$prev) return array();

        $sql  = " SELECT Vendeur_Nom, Vendeur_Prenom, Vendeur_Email, IdVendeur ";
        $sql .= " FROM ao_vendeur V";
        $sql .= " INNER JOIN ao_voiture_occasion O ON V. IdVendeur = O.Occas_Vendeur";

        $sql .= " WHERE O.annonce_parution_id NOT IN (" . PAS_DE_PARUTION_JOURNAL .','.UNE_PARUTION_JOURNAL.")"; // Pas Sur le web ou pas un seul passage
        $sql .= " AND Occas_DateSaisie BETWEEN '".$prev."' AND '".$next."' AND V.bouclage <> 1";
        
        if ($check) $sql .= " LIMIT 1"; 

        $jdb     = jDb::getDbWidget();
        $tResult =  $jdb->fetchAll($sql);

        return $tResult;
    }



    /**
     * Envoi de mail
     *
     */
     public function sendMail($datas) {

        $mail = new PHPmailer();
        $mail->IsSMTP();
        $mail->IsHtml(true);
        $mail->AddAddress($datas->Vendeur_Email);
        $mail->Host         = $GLOBALS['gJConfig']->mailer['smtpHost'];
        $mail->Port         = $GLOBALS['gJConfig']->mailer['smtpPort'];
        $mail->Username     = 'Auto Occasion';
        $mail->From         = $GLOBALS['gJConfig']->mailer['webmasterEmail'];
        $mail->FromName     = 'Auto - occasion';
        $mail->Subject      = 'Auto Occasion : pre bouclage';
        $mail->Body         = self::getMailBody($datas);
        
        if (!$mail->Send()){
          echo $mail->ErrorInfo;
          die('Sending mail - Error');
        }
        
        $mail->SmtpClose();
        $mail->ClearAddresses();
        unset($mail);
        
     }

     /**
      * récupération du contenu du mail à envoyer
      *
      */
      public static function getMailBody ($datas) {
          $body = $datas->mailBody;
          $body = str_replace("{NOM}", $datas->Vendeur_Nom, $body);
          return $body;
      }


         /**
         * Recherche num parution et les deux  dernières  dates de  parution 
         * 
         */
      public function checkDateParution () {
        $sql  = " SELECT  parution_limite";
        $sql .= " FROM ao_parution";
        $sql .= " WHERE parution_date > CURDATE( )";
        $sql .= " ORDER BY parution_date DESC LIMIT 2";
        $cnx  = jDb::getConnection();

        $rs = $cnx->query($sql);
        $result = array();
        while($row = $rs->fetch()){
         $result[] = $row->parution_limite;
        }

        return $result;
    }

         /**
         * Archivage des annonces à partir de date limite de parution  -- bouclage
         */

      public function updateAnnonce ($parution) {

         $sql  = " UPDATE ao_voiture_occasion SET Occas_Valide = '2'";
		 $sql .= " WHERE ((Occas_DateDerAdmin < '".$parution."' AND Occas_DateDerAdmin <> '0000-00-00')";
         $sql .= " OR (Occas_DateSaisie <= '".$parution."' AND Occas_DateDerAdmin = '0000-00-00'))";
		 $sql .= " AND Occas_Partenaire = '0'";
		 $sql .= " AND Occas_Valide = '1'";
		 $sql .= " AND Occas_Estsaisie = '1'";

         $cnx = jDb::getConnection();
         return $cnx->exec($sql); 
      }

      /**
      * Recherche des vieilles annonces 
      * souscrit un formule avec qu’une seule parution 
      */
      public function checkOldAnnonces($limit = false){
        $sql  = " SELECT IdOccasion";
        $sql .= " FROM ao_voiture_occasion";
        $sql .= " WHERE Occas_Partenaire = ''";
        $sql .= " AND Occas_DateDerAdmin <> '0000-00-00'";
        $sql .= " AND Occas_Valide = '1'";
        $sql .= " AND Occas_Estsaisie = '1'";
        $sql .= " AND DATEDIFF( CURDATE( ) , Occas_DateDerAdmin )>365";

        if ($limit) $sql .= " LIMIT 1"; 

        $cnx     = jDb::getConnection();

        $rs = $cnx->query($sql);
        $result = array();
        while($row = $rs->fetch()){
         $result[] = $row->IdOccasion;
        }

        return $result;

     }

      /**
      * Recherche num parution et les deux  dernières  dates de  parution 
      * souscrit un formule avec une seule parution 
      */
      public function deleteOldAnnonces ($datas) {

        $sql  = "DELETE FROM ao_voiture_occasion WHERE IdOccasion IN ($datas)";
        $cnx = jDb::getConnection();
        return $cnx->exec($sql); 

    }


      /**
      * Envoi le mail de relance -- prebouclage
      */
      public function relance ($datas, $parution, $numero) {
            $SERVER_NAME = "www.auto-occasion.fr";
            $TNaissance = explode("-",$datas->Vendeur_Naissance);
			$Naissance = $TNaissance[2]."/".$TNaissance[1]."/".$TNaissance[0];

			$Message .= "Bonjour ".$datas->Civ_Nom." ".$datas->Vendeur_Prenom." ".$datas->Vendeur_Nom."\n\n";

			if ( substr($datas->Occas_Opt_Parution,3,1) == 0 )
			{
			// Rialisation de la recherche des tarifs
                $tarif = self::getTarif();				

                foreach ($tarif as $itemTarif) {
					switch ($itemTarif->Tarif_Photo)
					{
						case "S" :
							$Tarif[0] = $Tarifs->Tarif_Prix;
							break;
						default :
							$Tarif[1] = $Tarifs->Tarif_Prix;
							break;
					}
				}

				$Message .= "Vous avez opt&#233; pour la formule \"Une annonce sur le site\" qui vous donne droit &#224; une annonce jusqu'&#224; la vente sur notre site.<br>Vous avez la possibilit&#233; de modifier ou de supprimer votre annonce qui passe sur notre site en vous rendant &#224; la rubrique \"modifier/supprimer\" ou en cliquant sur le lien suivant: \n";
				$Message .= "<div align=\"center\"><center><a href=\"http://".$SERVER_NAME."/petites-annonces-vehicules-d-occasion/gestion/index.php\">http://".$SERVER_NAME."/petites-annonces-vehicules-d-occasion/gestion/index.php</a></center></div>\n\n";
				$Message .= "Si aucune modification ou relance (lien ci-dessus, puis cliquer sur \"relancer\") n'a &#233;t&#233; effectu&#233;e depuis le ".$parution->Limite.", votre annonce sera supprim&#233;e le ".$numero->Limite." ceci afin de garantir aux acheteurs la fra&#238;cheur des annonces.\n\n";
				$Message .= "Pour les annonces datant d'apres le ".$parution->Limite.", vous n'avez rien a faire mais vous gardez la possibilit&#233; de faire des modifications jusqu'au ".$numero->Limite."pour que celles-ci soient prises en compte dans le prochain journal\n\n";
				$Message .= "<u>Couplage Internet/Journal d'annonces</u>\n\n";
				$Message .= "Sachez que vous pouvez accro&#238;tre l'efficacit&#233; de votre annonce en optant pour une parution en couplage avec notre journal Auto datasion diffus&#233; en librairie : 50.000 exemplaires sur toute la France.\n";
				$Message .= " Vous avez le choix entre : \n      - Une parution jusqu'&#224; la vente (journal + internet illimit&#233;s) pour <b>".$Tarif[0]." </b>\n      - Une parution jusqu'&#224; la vente avec photo couleur (journal + internet illimit&#233;s)  pour <b>".$Tarif[1]." </b> seulement!\nReportez-vous au lien ci-dessus et cliquez sur \"modifier vos options\".\n\n";
			}
			else if ( substr($datas->datas_Opt_Parution,3,1) == 1 )
			{
			    // R&#233;alisation de la recherche des tarifs
				$tarif = self::getTarif2();

				foreach  ( $tarif as $tarifItem)
				{
					switch ($tarifItem->Tarif_Parution)
					{
						case "0" :
							$Tarif[0] = $tarifItem->Tarif_Prix;
							break;
						case "X" :
							if ( $Tarifs->Tarif_Photo == "S" ) {					
								$Tarif[1] = $tarifItem->Tarif_Prix;
							} else {
								$Tarif[2] = $tarifItem->Tarif_Prix;
							}
							break;
					}
				}

				$Message .= "Vous avez opt&#233; pour la formule \"Paire de Dames\" qui vous donnait droit &#224; une annonce dans notre journal et sur notre site durant un 1 mois. Si votre ".$datas->marque_libelle." ".$datas->modele_libelle." n'est toujours pas vendu, vous pouvez choisir parmi nos formules &#233;conomiques :\n\n";
				$Message .= "      - <u>Une parution illimit&#233;e</u> sur le site auto-occasion.fr pour <b>".$Tarif[0]." </b>\n      - <u>Une parution jusqu'&#224; la vente</u> (journal + internet illimit&#233;s) pour <b>".$Tarif[1]." </b>\n      - <u>Une parution jusqu'&#224; la vente</u> avec photo couleur (journal + internet illimit&#233;s) pour <b>".$Tarif[2]." </b>\nReportez-vous au lien ci-dessous et cliquez sur \"modifier vos options\" avant le ".$numero->Prepublication.".\n\n";
				$Message .= "<div align=\"center\"><center><a href=\"http://".$SERVER_NAME."/petites-annonces-vehicules-d-occasion/gestion/index.php\">http://".$SERVER_NAME."/petites-annonces-vehicules-d-occasion/gestion/index.php</a></center></div>\n\n";
				$Message .= "Au-del&#224; de cette date votre annonce sera supprim&#233;e.\n\n";
			}
			else
			{
				$Message .= "Votre annonce est d&#233;j&#224; en ligne sur notre site, sa prochaine parution dans le journal AUTO OCCASION se fera le ".$numero->Parution." <font color=\"#FF0000\"><u>mais vous n'avez que jusqu'au ".$numero->Prepublication."</u></font> pour la modifier ou la supprimer en vous rendant &#224; la rubrique \"modifier/supprimer\" ou en cliquant sur le lien ci-dessous :\n";
				$Message .= "<div align=\"center\"><center><a href=\"http://".$SERVER_NAME."/petites-annonces-vehicules-d-occasion/gestion/index.php\">http://".$SERVER_NAME."/petites-annonces-vehicules-d-occasion/gestion/index.php</a></center></div>\n\n";
			}

			$Message .= "Pour g&#233;rer votre annonce vous aurez besoin des codes suivants :\n";
			$Message .= "<table width=\"400\" border=\"0\">";
			$Message .= "<tr><td width=\"200\" align=\"right\">Votre Nom : </td>";
			$Message .= "<td>".$datas->Vendeur_Nom."</td></tr>";
			$Message .= "<tr><td align=\"right\">Votre date de naissance : </td>";
			$Message .= "<td>".$Naissance."</td></tr>";
			$Message .= "<tr><td align=\"right\">L'immatriculation : </td>";
			$Message .= "<td>".$datas->Occas_NumImmatricul."</td></tr>";
			$Message .= "</table>\n\n";
			$Message .= "Bonne vente et n'oubliez pas que ce soit www.auto-occasion.fr ou le journal Auto datasion nous sommes vos <i><b>conseillers en transaction</b></i>\n";
			$Message .= "<u>Un seul num&#233;ro :</u>\n";
			$Message .= "<i><font color=\"#3366FF\" size=\"4\">01 34 22 3000</font></center></div>\n\n";
			$Message .= "Nous vous remercions pour la confiance que vous nous accordez, et nous esp&#233;rons que la vente de votre v&#233;hicule se fera rapidement et dans de bonnes conditions.\n\n";
			$Message .= "<div align=\"center\"><center><u>Toute l'&#233;quipe d'auo-occasion.fr</u>\n";
			$Message .= "<a href=\"mailto: annonces@auto-occasion.fr\">annonces@auto-occasion.fr</a></center></div>\n";
            
            $mail = new stdClass();
            $mail->body = nl2br($Message);
            $mail->adress = $datas->Vendeur_Email;
			

            self::sendmailRelance($mail);
    }


    /**
     * Envoi de mail
     *
     */
     public static function sendmailRelance($datas) {

        $mail = new PHPmailer();
        $mail->IsSMTP();
        $mail->IsHtml(true);
        $mail->AddAddress($datas->adress);
        $mail->Host         = $GLOBALS['gJConfig']->mailer['smtpHost'];
        $mail->Port         = $GLOBALS['gJConfig']->mailer['smtpPort'];
        $mail->Username     = 'Auto Occasion';
        $mail->From         = $GLOBALS['gJConfig']->mailer['webmasterEmail'];
        $mail->FromName     = 'Auto - occasion';
        $mail->Subject      = 'Auto Occasion : pre bouclage';
        $mail->Body         = $datas->body;
        
        if (!$mail->Send()){
          echo $mail->ErrorInfo;
          die('Sending mail - Error');
        }
        
        $mail->SmtpClose();
        $mail->ClearAddresses();
        unset($mail);
        
     }

}